import type { GroupOptions, MoveEvent, SortableEvent } from 'sortablejs'

export interface BwDragModel {
  /** 是否允许拖拽排序 */
  sort?: boolean

  /** 拖拽动画时长： ms */
  animation?: number

  /** 允许拖拽的项目类名 */
  draggable?: string

  /** 被选中项的css 类名 */
  chosenClass?: string

  /** 是否开启拖拽参照气泡 */
  isHoverBubble?: boolean

  group: string | GroupOptions

  /** 过滤不需要拖动的元素类名 */
  filter?: string

  /** 允许接收的项目类名 */
  receivClass?: string

  /** 元素被选中 */
  onChoose?: (evt: SortableEvent) => void

  // /** 元素未被选中的时候（从选中到未选中） */
  onUnchoose?: (evt: SortableEvent) => void

  /** 开始拖拽的时候 */
  onStart?: (evt: SortableEvent) => void

  /** 列表内元素顺序更新的时候触发 */
  onUpdate?: (evt: SortableEvent) => void

  /** 列表内元素位置改变的时候触发 */
  onChange?: (evt: SortableEvent) => void

  /** 新增元素 */
  onAdd?: (evt: SortableEvent) => void

  /** 拖拽移动的时候 */
  onMove?: (evt: MoveEvent, originalEvent: Event) => void

  /** 结束拖拽 --- 原生事件 */
  onEnd?: (evt: SortableEvent) => void

  /** 结束拖拽 */
  onDragEnd?: (evt: BwSortableModel) => void
}

/** 设计器拖拽排序模型 */
export interface BwSortableModel {
  dragged?: HTMLElement
  related?: HTMLElement
  from?: HTMLElement
  to?: HTMLElement
  position?: 'top' | 'bottom'
  originalEvent?: Record<string, any>
}
